package com.lyy.extend_study;


import java.util.Arrays;
import java.util.Scanner;

/**
 * @Author:  GZQ
 * @date:  2024/11/13 21:54
 */

public class Sub extends Base{ // 子类

    public Sub(String name, int age) {
        // 细节4：显示调用：
        // 1. 要调用父类的无参构造器, 如下或者 什么都不写, 默认就是调用super()
//        super(); // 父类的无参构造器
        // 2. 调用父类的 Base(String name) 构造器
//        super("lyy");
        // 3. 调用父类的 Base(String name, int age) 构造器 (细节5：如果使用super,必须出现在第一行)
        super("lyy", 18);
//        this("aaa")  // 错误 --> 细节6：super() 和 this() 必须放在第一行, 所以使用了super()，就不能再使用this()了

        System.out.println("子类的Sub(String name, int age)构造器被调用了...");

    }

    public Sub() { // 无参构造器
//        super(); // 细节2：默认调用父类的无参数构造器 (注意写不写，都会调用)
        super("lyy", 18);
        System.out.println("子类的Sub构造器被调用了...");
    }

    /**
     * 细节3：当创建子类对象时, 不管使用子类的那个构造器, 默认情况下总会调用父类的无参构造器
     */
    public Sub(String name) { // 有参构造器
        super("l", 18);
        // do nothing....
        System.out.println("子类的Sub(String name)构造器被调用了...");
    }

    public void sayOk() {
        // 细节1：非私有的属性和方法可以在子类直接访问
        // 但是私有属性不能在子类直接访问
        System.out.println(n1 + " " + n2 + " " + n3);
        test100();
        test200();
        test300();
//        test400(); // 错误 --> 不能直接调用私有方法
        System.out.println("n4=" + getN4());
        callTest400();
    }
}
